package utils;

import commands.Command;

import java.util.ArrayList;
import java.util.List;

public class CommandStack {
    /*
     * 功能：
     * 根据需求描述，这里理解为可以多次连续进行undo，但只有前一个命令是undo时才能redo，即不能连续redo
     *
     * 设计：
     * 全局栈，用于存储所有执行过的命令，其中undo和redo不存储
     * 每次执行一个命令时，将命令压入栈中，在执行undo时，将栈顶的命令弹出，执行命令的undo操作，
     * 命令的undo操作会返回前一个命令的EditorContext，将这个EditorContext的内容赋值给当前的EditorContext
     */
    private static List<Command> instance;
    private static Command redoCommand;

    private CommandStack() {
    }

    public static List<Command> getInstance() {
        if (instance == null) {
            instance = new ArrayList<>();
        }
        return instance;
    }

    public static Command getRedoCommand() {
        return redoCommand;
    }

    public static void setRedoCommand(Command redoCommand) {
        CommandStack.redoCommand = redoCommand;
    }
}
